/** 
 * Klasse Zeitschrift erbt von Printmedium.
 * 
 * Alle Methoden mit setze...() weisen einer Variablen einen Wert zu.
 * Alle gib...() Methoden liefern den Wert der jeweiligen Variablen
 * zurueck.
 * 
 * 
 * Datei: Zeitschrift.java         	Autor: Simon Schindelmann 
 * Datum: 06.11.11                 	Version: 0.2
 * 
 * Historie:
 * 06.11.11   v0.1    Klasse angelegt.
 * 25.12.11:  v0.2    ISSN Methode geaendert. Prueft nun ob die selbe
 *                    ISSN schon vorhanden ist.
 */

package medienverwaltung;

import medienverwaltung.simulation.Uebersetzung;
import basis.idnr.ISSN;


public class Zeitschrift extends Printmedium
{
 
  private static final long serialVersionUID = -1358139122377137645L;
  //Speichert die aktuelle Sprache die verwendet wird.
  private Uebersetzung uebersetzung = Uebersetzung.gibSprache ();
  private ISSN issn;


  public Zeitschrift (String titel, String datum, Abmessung abmessung,
      String issn) throws KeinDatumFormat, VergebeneISSNAusnahme
  {
    super (titel, datum, abmessung);
    setzeISSN (issn, gibMediumId());
    initial = "ZS";
  }


  public Zeitschrift (String titel, String datum, Abmessung abmessung,
      String verlag, String ausgabe, String issn)
      throws KeinDatumFormat, VergebeneISSNAusnahme
  {
    super (titel, datum, abmessung, verlag, ausgabe);

      setzeISSN (issn, gibMediumId());
      initial = "ZS";
  }

  
  /**
   * Gibt die ISSN der Zeitschrift zurueck.
   * @return ISSN der Zeitschrift.
   */
  public ISSN gibISSN ()
  {
    return issn;
  }
  
  
  /**
   * Hier wird die ISSN der Zeitschrift gesetzt.
   * @param issn String der die ISSN enthaelt die gesetzt werden soll.
   * @param id ID der Zeitschrift um zu vermeiden, dass bei der Pruefung 
   * ob es diese ISSN schon gibt, bei der Zeitschrift die die ISSN 
   * setzen will eine Ausnahme geworfen wird.
   * @throws VergebeneISSNAusnahme wird geworfen wenn ein anderes Medium
   * diese ISSN schon besitzt.
   */
  public void setzeISSN (String issn, int id)
      throws VergebeneISSNAusnahme
  {
    ISSN tmp = new ISSN (issn);
    Mediumverwalter mv = new Mediumverwalter ();
    // Wird auf true gesetzt wenn ein Medium die gleiche ISSN hat.
    boolean vorhanden = false;
    // Im Medium mu wird das Medium gespeichert was die selbe ISSN hat.
    Medium mu = null;

    // Es werden die ISSNs aller Medien geprueft die eine ISSN besitzen.
    for (Medium m : mv.gibMedienListe ())
    {
      if (m.gibInitial ().equals ("ZS"))
      {
        Zeitschrift z = (Zeitschrift) m;
        if (z.gibISSN ().toString ().equals (tmp.toString ())
            && z.gibMediumId () != id)
        {
          vorhanden = true;
          mu = m;
        }
      }
    }

    /*
     * Wenn keine Zeitschrift gefunden wurde, die die selbe ISSN hat 
     * wird die ISSN gesetzt. Andernfalls wird eine 
     * VergebeneISBNAusnahme geworfen. Die den Fehler Text enthaelt und 
     * die Nr des Mediums das diese ISSN schon hat.
     */
    if (vorhanden == false)
    {
      this.issn = tmp;
    }
    else
    {
      uebersetzung = Uebersetzung.gibSprache ();
      throw new VergebeneISSNAusnahme (uebersetzung.lokal
          .gibUebersetzung ("Diese ISSN besitzt schon dieses Medium")
          + ":" + "\n"
          + uebersetzung.lokal.gibUebersetzung ("MediumNr") + ": "
          + mu.gibMediumId ());
    }
  }
}
